/**
 * 使用示例：
 * <p>
 *     <ul>
 *         <li> 基本日期选择:<input type="text"  lay-date-picker="" ng-model="date" placeholder="日期"/>
 *         <li> 带有日期范围选择:<input type="text"  lay-date-picker="" range="true" ng-model="daterange" placeholder="日期范围"/>
 *         <li> 带有日期范围选择，并自定范围符号:<input type="text"  lay-date-picker="" range="→" ng-model="daterange" placeholder="日期范围"/>
 *         <li> 时间选择:<input type="text"  lay-date-picker="" range="true" ng-model="daterange" placeholder="时间"/>
 *         <li> 时间范围选择:<input type="text"  lay-date-picker="" range="true" date-type="time" ng-model="daterange" placeholder="时间范围"/>
 *         <li> 日期时间范围选择:<input type="text"  lay-date-picker="" range="true" date-type="datetime" ng-model="daterange" placeholder="日期时间范围"/>
 * </p>
 */
class LayDatePicker {
    constructor() {
        this.require= '?ngModel';
        this.restrict = "A";
        this.scope={
            ngModel: '=',
            max:'@',
            min:'@',
            //开启日期范围选择功能，并定义分隔符。
            //true //或 range: '~' 来自定义分割字符
            range:'@',
            //值：year、month、time、datetime、date
            //默为，date
            dateType:'@',
            format:"@"
        };
        this.link=function(scope, element, attr, ngModel) {
            var _date = null,_config={};
            // 初始化参数
            _config = {
                elem: element[0],
                //通过laydate的done回调函数重新设置ngModel的值
                done: function(value, date, endDate){
                    scope.$apply(setViewValue(value));
                    // console.log("done: "+value); //得到日期生成的值，如：2017-08-18
                    // console.log("done: "+date); //得到日期时间对象：{year: 2017, month: 8, date: 18, hours: 0, minutes: 0, seconds: 0}
                    // console.log("done: "+endDate); //得结束的日期时间对象，开启范围选择（range: true）才会返回。对象成员同上。
                }
            };

            // 监听日期类型
            if(attr.hasOwnProperty('dateType') && attr.dateType ){
                _config.type=attr.hasOwnProperty('dateType') && attr.dateType ?attr.dateType:'';
                attr.$observe('dateType', function (val) {
                    _config.type = val;
                })
            }

            // 监听格式
            if(attr.hasOwnProperty('format') && attr.format ){
                _config.format=attr.hasOwnProperty('format') && attr.format ?attr.format:'';
                attr.$observe('format', function (val) {
                    _config.format = val;
                })
            }

            // 监听日期最大值
            if(attr.hasOwnProperty('max') && attr.max ){
                _config.max=attr.hasOwnProperty('max') && attr.max ?attr.max:'';
                attr.$observe('max', function (val) {
                    _config.max = val;
                })
            }

            // 监听日期最小值
            if(attr.hasOwnProperty('min') && attr.min ){
                _config.min= attr.hasOwnProperty('min')&& attr.min ?attr.min:'',
                attr.$observe('min', function (val) {
                    _config.min = val;
                })
            }
            // 监听是否开启日期范围选择功能
            if(attr.hasOwnProperty('range') && attr.range ){
                setDateRange(_config,attr);
                attr.$observe('range', function (val) {
                    setDateRange(_config,attr);
                    // 重新渲染日期窗口
                    _date= laydate.render(_config);
                })
            }

            function setDateRange(_config,attr) {
                var tmpRangeValue = attr.hasOwnProperty('range') && attr.range ?attr.range:'';
                if(tmpRangeValue && tmpRangeValue!==false && tmpRangeValue!=="false"){
                    if(tmpRangeValue=="true" || tmpRangeValue==true){
                        _config.range=true ;
                    }else{
                        _config.range=tmpRangeValue ;
                    }
                }
            }
            // 渲染日期窗口
            _date= laydate.render(_config);

            // 模型值同步到视图上
            ngModel.$render = function() {
                element.val(ngModel.$viewValue || '');
            };

            //初始化ngModel的默认值
            setViewValue("");

            // 更新模型上的视图值
            function setViewValue(value) {
                ngModel.$setViewValue(value);
            }
        };
    }

}

LayDatePicker.$inject = [];
export default LayDatePicker;